package leetcode.editor.cn.dsa02_linkedlist;
//对于非负整数 X 而言，X 的数组形式是每位数字按从左到右的顺序形成的数组。
// 例如，如果 X = 1231，那么其数组形式为 [1,2,3,1]。
// 给定非负整数 X 的数组形式 A，返回整数 X+K 的数组形式。

import java.util.LinkedList;
import java.util.List;

public class AddToArrayFormOfInteger989_1 {
    public static void main(String[] args) {
        AddToArrayFormOfInteger989_1.Solution solution = new AddToArrayFormOfInteger989_1().new Solution();
        int[] arr = {99};
        int[] arr2 = {1, 2, 5, 6};
        System.out.println(solution.addToArrayForm(arr, 34));
        System.out.println(solution.addToArrayForm(arr, 1212));
        System.out.println(solution.addToArrayForm(arr, 99999));
        System.out.println(solution.addToArrayForm(arr2, 34));
        System.out.println(solution.addToArrayForm(arr2, 1212));
        System.out.println(solution.addToArrayForm(arr2, 99999));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /**
         * 这道题因为规定了K的范围 0 <= K <= 10000，因此K不会溢出，
         * 可以把K作为基础数直接与数组的每一个元素进行相加。然后取其进位和末位
         * 循环该过程，直至进位处理完毕或者数组遍历完毕
         */
        public List<Integer> addToArrayForm(int[] A, int K) {
            LinkedList<Integer> list = new LinkedList<>();
            int cur = K;
            int index = A.length;
            // 循环结束条件，数组遍历完毕或者进位全部处理完毕
            while(--index >= 0 || cur > 0){
                if(index>=0)
                    cur += A[index]; // 数组有数就直接相加
                list.addFirst(cur%10); // 保存末位
                cur = cur / 10; // 取进位
            }
            return list;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}